package com.gxc.tree;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * 题目描述
 * 给定一个二叉树，每个节点上站一个人，节点数字表示父节点到该节点传递悄悄话需要花费的时间。
 *
 * 初始时，根节点所在位置的人有一个悄悄话想要传递给其他人，求二叉树所有节点上的人都接收到悄悄话花费的时间。
 *
 * 输入描述
 * 给定二叉树
 *
 * 0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2
 */
public class Whisper {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] whisperTimes  = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        scanner.close();

        int maxTime = 0;
        Queue<Integer> queue = new LinkedList<>();
        queue.add(0);

        while (!queue.isEmpty()) {
            //父节点所以呢
            int currentIndex  = queue.poll();
            int currentTime = 0;

            int leftNodeIndex = 2 * currentIndex + 1;
            int rightNodeIndex = 2 * currentIndex + 2;

            if (leftNodeIndex < whisperTimes.length) queue.add(leftNodeIndex);
            if (rightNodeIndex < whisperTimes.length) queue.add(rightNodeIndex);

            if (currentIndex > 0) {
                currentTime = whisperTimes[(currentIndex - 1) / 2] + whisperTimes[currentIndex];
            } else {
                currentTime = whisperTimes[0];
            }
            whisperTimes[currentIndex] = currentTime;
            maxTime = Math.max(maxTime, currentTime);
        }

        System.out.println(maxTime);
    }
}
